package org.example.ba02;

import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.AfterReturning;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;

import java.util.Date;

/*@Aspect :  该注解是aspect中的注解，表示该类是切面类
*           切面类：用来给目标方法增加功能的类，在该类中有切面代码*/
@Aspect
public class MyAspect {
/*
* 后置通知定义方法：
*   方法是public void
*   方法有参数，推荐是Object*/

    /*@AfterReturning   后置通知
    * 属性：
    *       1.value
    *       2.returning  :表示目标方法的返回值
    *               自定义变量名必须和通知方法的形参名一样*/
    @AfterReturning(value = "execution(* *..*.doOther(..))",returning = "o")
    public void myAfterTerurning(Object o){

        System.out.println("方法后执行，获取的返回值是"+o);
        o = "123";

    }

    @AfterReturning(value = "execution(* *..*.doOther2(..))",returning = "o")
    public void myAfterTerurning2(JoinPoint jp,Object o){
        /*JoinPoint jp必须位于参数列表的第一位*/
        System.out.println("后置通知：方法的签名"+jp.getSignature());
        //System.out.println("方法后执行，获取的返回值是"+o);
        o = new Student("张三",45);
    }
}
